const express = require('express');
const jwt = require('jsonwebtoken'); // 引入 jsonwebtoken 库
const router = express.Router();
const User = require('../sql/user.js'); // 确保路径正确


// 登录接口
router.post('/login', async (req, res) => { // 修改为 POST 请求
    console.log('req.body', req.body);
    const { phone, password } = req.body;

    // 验证用户名和密码是否存在
    if (!phone || !password) {
        return res.status(400).json({ message: '用户名和密码不能为空' });
    }

    try {
        // 从数据库中查找用户
        const user = await User.findOne({ where: { phone } }); // 确保使用 phone 字段查找用户
        if (!user) {
            return res.status(401).json({ message: '用户名或密码错误' });
        }

        // 验证密码
        if (user.password !== password) {
            return res.status(401).json({ message: '用户名或密码错误' });
        }

        // 生成 token
        const token = jwt.sign({ userId: user.id }, 'your_jwt_secret_key', { expiresIn: '12h' }); // 替换 'your_jwt_secret_key' 为自己的密钥

        res.status(200).json({ message: '登录成功', token }); // 返回 token
    } catch (error) {
        console.error('登录失败:', error);
        res.status(500).json({ message: '服务器错误' });
    }
});

// 注册接口
router.post('/register', async (req, res) => {
    const { phone, password, name } = req.body;

    // 验证手机号和密码
    if (!phone || !password || password.length < 6) {
        return res.status(400).json({ message: '手机号不能为空且密码最少6位数' });
    }
    try {
        // 检查手机号是否已存在
        console.log(User, '2'); // 确保 User 模型正确导入
        const existingUser = await User.findOne({ where: { phone } });
        console.log(existingUser, 'existingUser');
        if (existingUser) {
            return res.status(400).json({ message: '手机号已存在' });
        }

        // 创建新用户
        const newUser = await User.create({ name, phone, password });
        res.status(201).json({ message: '注册成功', user: { name, phone } });
    } catch (error) {
        console.error('注册失败:', error);
        res.status(500).json({ message: '服务器错误' });
    }
});

// 忘记密码接口
router.post('/forgot-password', async (req, res) => {
    const { phone } = req.body;

    // 验证手机号是否存在
    if (!phone) {
        return res.status(400).json({ message: '手机号不能为空' });
    }

    try {
        // 从数据库中查找用户
        const user = await User.findOne({ where: { phone } });
        if (!user) {
            return res.status(401).json({ message: '手机号不存在' });
        }

        // 生成验证码
        const verificationCode = crypto.randomInt(100000, 999999).toString();

        // 存储验证码
        verificationCodes[phone] = verificationCode;

        // 实际应用中应发送验证码到用户的手机
        console.log(`验证码: ${verificationCode}`);

        res.status(200).json({ message: '验证码已发送' });
    } catch (error) {
        console.error('忘记密码失败:', error);
        res.status(500).json({ message: '服务器错误' });
    }
});

// 重置密码接口
router.post('/reset-password', async (req, res) => {
    const { phone, verificationCode, newPassword } = req.body;

    // 验证手机号、验证码和新密码是否存在
    if (!phone || !verificationCode || !newPassword || newPassword.length < 6) {
        return res.status(400).json({ message: '手机号、验证码和新密码不能为空且新密码最少6位数' });
    }

    try {
        // 验证验证码是否正确
        if (verificationCodes[phone] !== verificationCode) {
            return res.status(401).json({ message: '验证码错误' });
        }

        // 删除验证码
        delete verificationCodes[phone];

        // 更新用户的密码
        const updatedUser = await User.update({ password: newPassword }, { where: { phone } });
        if (updatedUser[0] === 0) {
            return res.status(401).json({ message: '手机号不存在' });
        }

        res.status(200).json({ message: '密码重置成功' });
    } catch (error) {
        console.error('重置密码失败:', error);
        res.status(500).json({ message: '服务器错误' });
    }
});

module.exports = router;